<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 1. 封装函数，用来根据指定数据，查询指定数组中是否存在该数据，如果存在，返回存在个数，如果不存在，返回false
    function has(arr, data){
        // 用来记录出现的次数
        var n = 0;
        // 遍历数组
        for(var i=0;i<arr.length;i++){
            // 将数组中的数据和传入的数据作比较
            if(arr[i] === data){
                // 增加一次记录
                n++;
            }
        }
        // 根据是否记录到次数，决定返回值
        return n ? n : false;
    }
    // var arr = [3,4,5,4,3,2,1,2,5,5,5,5,5,7,8,9];
    // console.log( has(arr, "hello") );
    // console.log( has(arr, 5) );
    // console.log( has(arr, 3) );

    // 2. 字符去重，封装函数，返回去重之后的字符
    function noRepeat(oStr){
        var str = "";
        for(var i=0;i<oStr.length;i++){
            if(str.indexOf(oStr[i]) === -1){
                str += oStr[i]
            }
        }
        return str;
    }
    // var str = "hello world";
    // console.log( noRepeat(str) );

    // 3. 统计字符串中每个字符出现的次数，以对象存储结果，封装函数，返回对象
    //     - "aabccc"
    //     - { a:2, b:1, c:3 }
    function count(str){
        // 创建空对象准备用来记录
        var obj = {};
        // 遍历字符
        for(var i=0;i<str.length;i++){
            // obj[ str[0] ]
            // obj[ "a" ]
            // obj.a
            // 根据字符设置键和值
            if( obj[ str[i] ] === undefined ){
                // 判断是第一次设置：添加
                obj[ str[i] ] = 1
            }else{
                // 之后的设置：+1
                obj[ str[i] ]++
            }
        }
        return obj;
    }
    // var str = "aaabccddefffffaabcdef";
    // console.log( count(str) );

    // 4. 判断字符串是否是回文字符串，封装函数，返回布尔值
    //     - "abccba"
    //     - "abcba"
    function fn(str){
        // 比较规则：
        // i === length-1-i
        // 只需要取出字符串的一半和另一半逐个比较即可
        // 取中间索引值
        var n = parseInt(str.length / 2);
        // 从左遍历到中间索引
        for(var i=0;i<n;i++){
            // 根据比较规则，进行比较
            if( str[i] !== str[str.length-1-i] ){
                // 只要有一个不相等，返回false
                return false;
            }
        }
        // 没有不相等，返回true
        return true;
    }
    // console.log(fn( "abccba" ))
    // console.log(fn( "abcba" ))
    // console.log(fn( "a" ))

    // console.log(fn( "abcda" ))
    // console.log(fn( "abccda" ))

    // 6. 敏感词过滤
    //     - 今天天气很好，我们开开心心去上学，今天天气很好
    //     - 好，开心，上学
    //     - ***
    //     - 今天天气很***，我们开***心去***，今天天气很***

    function myReplace(myStr, arr){
        // 先拿到每个敏感词
        for(var i=0;i<arr.length;i++){
            // 假设整个字符全部都是敏感词
            for(var j=0;j<myStr.length;j++){
                // 不断的替换，并覆盖原字符
                myStr = myStr.replace(arr[i], "***");
            }
        }
        return myStr;
    }
    // var str = "今天天气上学很好，我们开上学上学开心上学心去上上学上学学，今天上学天气很上学好";
    // var arr = ["好","开心","上学"]
    // var res = myReplace(str, arr);
    // console.log(str);
    // console.log(res);

</script>
</html>